线程与进程详解
线程和进程是程序运行的基本概念,理解它们对写高效、稳定的代码至关重要。
🧠 什么是进程?
进程是操作系统资源分配的基本单位。每个运行的程序都至少有一个进程。
特点:
- 拥有独立的内存空间
- 进程之间不能直接访问彼此内存
- 切换成本高,隔离性强
🧵 什么是线程?
线程是程序执行的最小单位,是 CPU 调度的基本单位。
特点:
- 线程共享进程的内存空间
- 创建和销毁成本低
- 多线程间需加锁避 免资源竞争
📊 对比总结
项目 | 进程 | 线程 |
---|---|---|
地址空间 | 独立 | 共享 |
创建开销 | 大 | 小 |
通信方式 | 消息队列、管道等 | 内存共享、锁 |
崩溃影响 | 相互独立 | 会影响整个进程 |
使用场景 | 多程序、隔离任务 | 并发执行任务 |
🎯 使用场景举例
场景 | 推荐 |
---|---|
CPU 密集型任务(加密、图像处理) | 多进程 |
IO 密集型任务(爬虫、网络请求) | 多线程 |
Web 应用并发请求 | 多线程/协程 |
前端异步加载 | 单线程 + 异步 |
🧑💻 示例代码
✅ Python 多线程
import threading
def worker():
print("工作线程执行中")
t = threading.Thread(target=worker)
t.start()
t.join()
✅ Python 多进程
from multiprocessing import Process
def worker():
print("多进程任务执行")
p = Process(target=worker)
p.start()
p.join()
✅ Node.js 模拟多任务(async 模式)
async function fetchData() {
const res = await fetch("https://api.example.com");
const data = await res.json();
console.log(data);
}
🧠 线程安全示例(加锁)
import threading
count = 0
lock = threading.Lock()
def add():
global count
with lock:
count += 1
🛠 实战建议
Python 中为什么多进程更适合 CPU 密集型任务?
因为 Python 的 GIL(全局解释器锁)限制了同一时刻只有一个线程在执行 Python 字节码。 所以多线程适合 IO 密集型(如网络请求),而多进程可以并行运行多个 Python 实例。
Node.js 是单线程的吗?
是的,Node.js 使用事件循环机制,在单线程中实现异步非阻塞 IO,但可以通过 worker_threads 实现并发。